home *** CD-ROM | disk | FTP | other *** search
AmigaBASIC Source Code | 1978-04-27 | 8.0 KB | 191 lines |
- REM This program computes azimuthal and elevation aiming coordinates
- REM and other orbital data for an earth satellite orbiting in an approximately
- REM circular, sun synronous, polar orbit, such as AMSAT's OSCAR-6, -7, or -8.
- REM Originally written in 1976, additional information is available from
- REM the author, Earl Skelton, N3ES; 6311 29th Pl., NW, Wash., DC 20015-2221
- REM telephones: (202)-767-3014 (office); (202)-363-1406 (home)
- REM
- REM DEFINITIONS:
- REM ALT = MEAN SATELLITE ALTITUDE (in km)
- REM AZM = AZIMUTHAL ANGLE BETWEEN QTH AND SSP
- REM DATE = GMT DATE OF ASCENDING NODE, e.g., 08-APR-76
- REM DELT = TIME INTERVAL BETWEEN OUTPUT DATA (DELTA T) (in min.)
- REM DIST = GREAT CIRCLE DISTANCE BETWEEN QTH AND SSP (in km)
- REM EARTHR = POLAR RADIUS OF EARTH (in km)
- REM ELEV = ANTENNA ELEVATION ANGLE (COMPLEMENT OF POLAR)
- REM QINC = ORBITAL INCLINATION ANGLE
- REM QLAT = LATITUDINAL POSITION OF SSP
- REM QLON = LONGITUDINAL POSITION OF SSP
- REM QTHLAT = LATITUDINAL POSITION OF QTH
- REM QTHLON= LONGITUDINAL POSITION OF QTH
- REM QLONX = WEST LONGITUDINAL CROSSING OF ASCENDING NODE
- REM NR = ORBITAL REVOLUTION NUMBER (if neg., all results printed)
- REM ORBINC = ORBITAL LONGITUDINAL INCREMENT
- REM PERIOD = SATELLITE PERIOD (in min)
- REM POLAR = POLAR ANGLE (MEASURED FROM VERT.) FROM QTH TO SATELLITE
- REM RANGE = LINE-OF-SIGHT DISTANCE FROM QTH TO SATELLITE
- REM TIMEZ = UTC TIME OF ASCENDING NODE (HR,MN,SC)
- REM TOF = ROUND TRIP TIME-OF-FLIGHT OF SIGNAL (in min)
- REM VLITE = SPEED OF LIGHT IN FREE SPACE (in km/sec)
- REM
- REM SET CONSTANTS
- REM USE POLAR RADIUS OF EARTH; EQUATORIAL RADIUS = 6378.160 km
- REM
- 1000 PI=5.30795e-315:CON=PI/180:EARTHR=6356.91:VLITE=299.793
- 1100 DIM III(300),AAA(9,300),JJJ(300),BBB(9,300)
- 1105 INPUT "If results are to be printed on line-printer, as well as screen, enter '1'",NPRINT
- 1200 INPUT "Program is set to run for OSCAR-7 or -8 or RS-1, ENTER NUMBER:",NSAT
- 1300 INPUT "Enter time interval between calculations in min. (=delta-T):",DELT
- 1400 IF NSAT=1, THEN GOTO 1800
- 1500 IF NSAT=7, THEN GOTO 1900
- 1600 IF NSAT=8, THEN GOTO 2000
- 1700 PRINT "UNRECOGNIZED SATELLITE NUMBER - RUN ABORTED."
- 1705 IF NPRINT=1, THEN LPRINT "UNRECOGNIZED SATELLITE NUMBER - RUN ABORTED."
- 1710 GOTO 9999
- 1800 PERIOD=102:ORBINC=25.5:QINC=82:ALT=950:GOTO 2100
- 1900 PERIOD=5.33502e-315:ORBINC=5.32466e-315:QINC=101.7:ALT=1460:GOTO 2100
- 2000 PERIOD=5.33407e-315:ORBINC=25.8087:QINC=99.146:ALT=909.583:GOTO 2100
- 2100 QTHLON=76.951:QTHLAT=38.835
- 2200 INPUT "Calculations based on QTH in Wash., DC. Change this? (NO=0)",NO
- 2200 IF NO><0, THEN INPUT "ENTER NEW QTH COORD. (LON.,LAT.)", QTHLON,QTHLAT
- 2300 SLATTH=SIN(QTHLAT*CON):CLATTH=COS(QTHLAT*CON)
- 2400 PRINT "If orbit number is positive, only 'visible' coordinates are printed."
- 2500 PRINT "If orbit number is negative, all coordinates are printed."
- 2600 INPUT "Enter starting orbit number:",NR
- 2700 INPUT "Enter date as 'mm/dd/yy':",DATE1$:DATE$=DATE1$
- 2800 INPUT "Enter time of ascending node as 'HR,MIN,SEC':",HR,MN,SC
- 2900 INPUT "Enter longitudinal in degrees west:",QLONX
- 3000 INPUT "Enter number of orbits to be calculated:",NADD
- 3010 MN=MN+SC/60:HR0=HR: MN0=MN
- REM IF NR<0, THEN PRINT ALL ORBITAL DATA, ELSE PRINT ONLY VISIBLE DATA
- 3020 K=0
- 3030 K=K+1
- 3040 FOR L=1 TO 9
- 3050 FOR J=1 TO 300
- 3060 AAA(L,J)=0: BBB(L,J)=0: III(J)=0: JJJ(J)=0
- 3070 NEXT J
- 3080 NEXT L
- 3100 IF K>1, THEN MN=MN+PERIOD
- 3105 IF MN<60, THEN GOTO 3130
- 3110 IF MN=>60, THEN MN=MN-60: HR=HR+1: GOTO 3105
- 3130 IF K>1 AND NR>0, THEN NR=NR+1
- 3140 IF K>1 AND NR<0, THEN NR=NR-1
- 3150 IF K>1, THEN QLONX=QLONX+ORBINC: HR0=HR: MN0=MN
- 3160 IF QLONX>360, THEN QLONX=QLONX-360
- 3170 NSITE=0: T=-DELT: J=0: TZ=MN-DELT: HRZ=HR: PERO4=PERIOD/4: TPERO4=3*PERO4
- REM BEGIN TIMING LOOP HERE, END AT 4180
- 3180 T=T+DELT: J=J+1
- 3190 XXX=2*PI*T/PERIOD
- 3200 SLAT=(SIN(QINC*CON)*(SIN(XXX))): CLAT=SQR(1-SLAT^2)
- 3210 QLAT=ATN(SLAT/CLAT)/CON
- 3220 CLON=(COS(XXX))/CLAT: SLON=SQR(1-CLON^2)
- 3230 QLON=ATN(SLON/CLON)/CON
- 3240 IF T>PERO4 AND T<TPERO4, THEN QLON=QLON+180
- 3250 QLON=QLON+QLONX+T/4
- 3260 IF QLON>360, THEN QLON=QLON-360
- REM INTRODUCE QUADRANT FUNCTIONS TO CHECK PROPER PHASE
- 3270 CKLAT=QLAT-QTHLAT: CKLON=QLON-QTHLON
- 3280 A=(QLON-QTHLON)*CON
- 3290 COSC=((SLAT*SLATTH)+(CLAT*CLATTH*COS(A)))
- 3300 RANGE=SQR((2*(EARTHR^2+(EARTHR*ALT))*(1-COSC))+ALT^2)
- 3310 TOF=2*RANGE/VLITE
- 3320 SINC=SQR(1-(COSC^2))
- 3330 C=ATN(SINC/COSC)
- 3340 IF COSC<0, THEN C=C+PI
- 3350 DIST=EARTHR*C
- 3360 COSBET=((SLAT-(SLATTH*COSC))/(CLATTH*SINC))
- 3370 SINBET=SQR(1-(COSBET^2))
- 3380 BETA=ATN(SINBET/COSBET)/CON
- REM SET PHASE OF ASM ANGLE
- 3390 NCBTST=1: IF COSBET<0, THEN NCBTST=-1
- 3395 NATST=1: A=A/CON
- 3400 IF A=>-180 AND A<0, THEN NATST=-1
- 3410 IF A=>180 AND A<360, THEN NATST=-1
- REM IF NATST=-1 AND NCBTST=+1, THEN AZM=BETA
- 3420 AZM=BETA
- 3430 IF NATST=-1 AND NCBTST=-1, THEN AZM=180+BETA
- 3440 IF NATST=1 AND NCBTST=-1, THEN AZM=180-BETA
- 3450 IF NATST=1 AND NCBTST=1, THEN AZM=360-BETA
- 3460 ELEV=ATN((COSC-(EARTHR/(EARTHR+ALT)))/SINC)/CON
- 3470 TZ=TZ+DELT
- 3480 IF TZ=>60, THEN TZ=TZ-60:HRZ=HRZ+1
- 3490 IF ELEV>0 AND ELEV<90, THEN GOTO 4000, :ELSE GOTO 4100
- 4000 NSITE=NSITE+1
- 4010 III(NSITE)=HRZ
- 4020 AAA(1,NSITE)=TZ
- 4030 AAA(2,NSITE)=QLAT
- 4040 AAA(3,NSITE)=QLON
- 4050 AAA(4,NSITE)=DIST
- 4060 AAA(7,NSITE)=AZM
- 4070 AAA(8,NSITE)=ELEV
- 4080 AAA(5,NSITE)=RANGE
- 4090 AAA(6,NSITE)=TOF
- 4100 JJJ(J)=HRZ
- 4110 BBB(1,J)=TZ
- 4120 BBB(2,J)=QLAT
- 4130 BBB(3,J)=QLON
- 4140 BBB(4,J)=DIST
- 4150 BBB(5,J)=AZM
- 4160 BBB(6,J)=ELEV
- 4170 IF T<PERIOD, THEN GOTO 3180
- 4180 XNSITE=NSITE*DELT: JEND=J
- REM OUTPUT RESULTS
- 4199 PRINT "ORBITAL CALCULATIONS FOR OSCAR-",NSAT:IF NPRINT=1, THEN LPRINT "ORBITAL CALCULATIONS FOR OSCAR-",NSAT
- 4200 IF NSITE=0, THEN PRINT "ORBIT #",:PRINT USING "####";NR,:PRINT" OUT OF RANGE"
- 4205 IF NPRINT=1 AND NSITE=0, THEN LPRINT "ORBIT #",:LPRINT USING"####";NR,:LPRINT" OUT OF RANGE"
- 4210 IF NSITE=0, THEN GOTO 4380
- 4221 IF NPRINT=1, THEN LPRINT "Orbit #",:LPRINT USING "####";NR,
- 4222 IF NPRINT=1, THEN LPRINT "; DATE/TIME: ",DATE$,:LPRINT USING "##";HR0,:LPRINT USING "###.#";MN0
- 4223 IF NPRINT=1, THEN LPRINT "WEST LONG. CROSSING = ",:LPRINT USING "###.#";QLONX
- 4224 IF NR<0, THEN GOTO 4342
- 4225 PRINT " HR MIN LAT. LON. DIST. R(km) TOF(msec) AZ EL"
- 4227 IF NPRINT=1, THEN LPRINT
- 4230 IF NPRINT=1, THEN LPRINT " HR MIN LAT. LON. DIST. R(km) TOF(msec) AZ EL"
- 4250 FOR J=1 TO NSITE
- 4256 PRINT USING "##";III(J),
- 4257 PRINT USING "###.#";AAA(1,J),
- 4258 PRINT USING "####.##";AAA(2,J),AAA(3,J),
- 4259 PRINT USING "#####.";AAA(4,J),AAA(5,J),
- 4260 PRINT USING "####.###";AAA(6,J),
- 4261 PRINT USING "####.#";AAA(7,J),:PRINT USING "###.#";AAA(8,J)
- 4262 IF NPRINT=1, THEN GOTO 4266, :ELSE GOTO 4310
- 4266 LPRINT USING "###";III(J),
- 4267 LPRINT USING "###.#";AAA(1,J),
- 4268 LPRINT USING "#####.##";AAA(2,J),AAA(3,J),
- 4269 LPRINT USING "#######.";AAA(4,J),AAA(5,J),
- 4270 LPRINT USING "####.### ";AAA(6,J),
- 4271 LPRINT USING "######.#";AAA(7,J),:LPRINT USING "###.#";AAA(8,J)
- 4310 NEXT J
- 4320 PRINT "SATELLITE VISIBLE FOR ",XNSITE," MINUTES."
- 4325 IF NPRINT=1, THEN LPRINT "SATELLITE VISIBLE FOR ",XNSITE," MINUTES."
- 4330 PRINT "-------------------------------------------------------------------------------"
- 4335 IF NPRINT=1, THEN LPRINT "-------------------------------------------------------------------------------"
- 4340 GOTO 4380
- 4342 PRINT " HR MIN LAT. LON. DIST. AZ EL"
- 4344 IF NPRINT=1, THEN LPRINT
- 4346 IF NPRINT=1, THEN LPRINT "HR MIN LAT. LON. DIST. AZ EL"
- 4350 FOR J=1 TO JEND
- 4352 PRINT USING "##";JJJ(J),
- 4353 PRINT USING "###.#";BBB(1,J),
- 4354 PRINT USING "####.##";BBB(2,J),BBB(3,J),
- 4355 PRINT USING "#####.";BBB(4,J),
- 4356 PRINT USING "####.##";BBB(5,J),BBB(6,J)
- 4361 IF NPRINT=1, THEN GOTO 4362, :ELSE GOTO 4369
- 4362 LPRINT USING "##";JJJ(J),
- 4363 LPRINT USING "###.#";BBB(1,J),
- 4364 LPRINT USING "####.##";BBB(2,J),BBB(3,J),
- 4365 LPRINT USING "######.";BBB(4,J),
- 4366 LPRINT USING "####.##";BBB(5,J),BBB(6,J)
- 4369 NEXT J
- 4370 PRINT "SATELLITE VISIBLE FOR ",XNSITE," MINUTES."
- 4375 IF NPRINT=1, THEN LPRINT "SATELLITE VISIBLE FOR ",XNSITE," MINUTES."
- 4377 PRINT "-------------------------------------------------------------------------------"
- 4378 IF NPRINT=1, THEN LPRINT "-------------------------------------------------------------------------------"
- 4380 NADD=NADD-1
- 4390 IF NADD=0, THEN GOTO 9999, :ELSE GOTO 3030
- 9999 INPUT "WOULD YOU LIKE TO RERUN THE PROGRAM (1=YES)",NRERUN
- IF NRERUN=1, THEN GOTO 1105
- END
-
-
-